//
//  HctpType.h
//  HiFiCloud
//
//  Created by Jian Luo on 2022/6/19.
//

#ifndef HctpType_h
#define HctpType_h

#ifdef  __cplusplus
extern "C" {
#endif

#include "basetype.h"


typedef void (*PFCmdProc)(void);

typedef void (*PFOnConnectSuccess)(S32 netType);
typedef void (*PFOnConnectFailure)(S32 errCode);

typedef void (*PFOnProgress)(void* context, U64 progress, U64 total);
//typedef void (*PFOnTransferSuccess)(S8* filename, S32 netspeed);
typedef void (*PFOnTransferSuccess)(S32 code, S32 netspeed);
typedef void (*PFOnTransferFailure)(S32 errCode);



typedef struct TMediaUpload  {
    S64 id;                // UUID  HashValue,  这里使用S64 （swfit的hash返回是Int64），   而C内部全部使用U64. （数据类型转换在C这边完成）
    S8  uidString[32];      // 24 byte
    S8  md5String[64];      // 32 byte ,设计多一位为了C的字符串 char* 打印以及 sal_file中的MD5接口  33byte 缺陷；
    S8* szLocalFilename;
    S8* szRemoteFilename;
    S8* szJsonString;
}TMediaUpload;


typedef struct TMediaDownload {
    S64 id;                 // UUID  HashValue,  Int,8 bytes , 这里使用S64 （swfit的hash返回是Int64），   而C内部全部使用U64. （数据类型转换在C这边完成）
    S8  uidString[32];      // 24 byte
    S8  md5String[64];      // 32 byte ,设计多一位为了C的字符串 char* 打印以及 sal_file中的MD5接口  33byte 缺陷；
    S8  replyJson[1024];
    S8* szLocalFilename;    // 临时存放文件， 成功后，要放入到相册
    S8* szJsonString;
    
}TMediaDownload;


typedef struct TFileUpload  {
    S64 id;           // UUID  HashValue,  这里使用S64 （swfit的hash返回是Int64）
    S8  overwriteFlag;    //default 2, rename  1 overWrite, 0 error if duplicate
    S8  albumFlag;    //default 0,    1文件同时加入照片库
    S8  md5String[64];      // 32 byte ,设计多一位为了C的字符串 char* 打印以及
    S8* szLocalFilename;        //app的文件全路径
    S8* szRemoteFilename;       //仅文件名 （没有路径）
    S8* szRemotePath;           //设备路径（无文件名）
    S8* szJsonString;
}TFileUpload;

typedef struct TFileDownload  {
    S64 id;           // UUID  HashValue,  这里使用S64 （swfit的hash返回是Int64）
    S8* szLocalFilename;        //app的文件全路径
    S8* szRemoteFilename;       //设备全路径含文件名
    S8* szJsonString;
}TFileDownload;

enum{
    NET_TYPE_P2P = 0,
    NET_TYPE_RLY,
    NET_TYPE_TCP,
};


enum{
    HCTP_RET_OK  = 0,
    HCTP_RET_ERROR_MALLOC,
    HCTP_RET_ERROR_PARAM,
    HCTP_RET_ERROR_TRANS_MANUAL_STOP,
    HCTP_RET_ERROR_TRANS_TASK_DUPLICATED,
    HCTP_RET_ERROR_TRANS_TASK_LIST_FULL,
    

    HCTP_RET_ERROR_TUNNEL_INIT,     //网络相关错误
    HCTP_RET_ERROR_PPCS_CONNECT,
    HCTP_RET_ERROR_PPCS_BROKEN,
    HCTP_RET_ERROR_PPCS_WRITE,
    HCTP_RET_ERROR_PPCS_CLOSE,
    HCTP_RET_ERROR_RECVREPLY_TIMEOUT,
    
    HCTP_RET_ERROR_LOCAL_MD5_CALC,  //本地文件相关错误  12
    HCTP_RET_ERROR_FILE_OPEN,
    HCTP_RET_ERROR_FILE_SIZE,
    HCTP_RET_ERROR_FILE_READ,
    HCTP_RET_ERROR_FILE_WRITE,
    
    HCTP_RET_ERROR_WRONG_OFFSET,    //设备端应答或拒绝
    HCTP_RET_ERROR_MAGIC_HDR,
    HCTP_RET_ERROR_MAGIC_HDR_OR_MALLOC,
    HCTP_RET_ERROR_DATATRANS_MD5,
    HCTP_RET_ERROR_TRANS_REJECTED,
    HCTP_RET_ERROR_TRANS_ABORT_FAILED,
    
    HCTP_RET_ERROR_QUEUE_NOTFOUND,

};

extern char* errCodeMsg[] ;

#ifdef __cplusplus
}
#endif

#endif /* HctpType_h */
